﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int removeElement(int* nums, int numsSize, int val)
//{
//    for (int i = 0; i < numsSize; i++)
//    {
//        if (val == nums[i])
//        {
//            if (i == numsSize - 1)
//            {
//                numsSize--;
//            }
//            else
//            {
//                for (int j = i; j < numsSize - 1; j++)
//                {
//                    nums[j] = nums[j + 1];
//                }
//                numsSize--;
//            }
//            i--;
//        }
//    }
//    return numsSize;
//}
//int removeElement2(int* nums, int numsSize, int val) {
//    int dest = 0;
//    int src = 0;
//    while (src < numsSize)
//    {
//        if (nums[src] == val)
//        {
//            src++;
//        }
//        else
//        {
//            nums[dest++] = nums[src++];
//        }
//    }
//    return dest;
//}
//int main()
//{
//	int nums[8] = { 0, 1, 2, 2, 3, 0, 4, 2 };
//	int sz = sizeof(nums) / sizeof(nums[0]);
//	//int ret = removeElement(nums, sz, 2);
//    int ret = removeElement2(nums, sz, 2);
//	for (int i = 0; i < ret; i++)
//	{
//		printf("%d ", nums[i]);
//	}
//	printf("\n");
//}
//
//int removeDuplicates(int* nums, int numsSize) {
//    int dst = 0;
//    int src = 1;
//    while (src < numsSize)
//    {
//        if (nums[src] == nums[dst])
//        {
//            src++;
//        }
//        else
//        {
//            nums[++dst] = nums[src++];
//        }
//    }
//    return dst + 1;
//}
//
//给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，
//分别表示 nums1 和 nums2 中的元素数目。
//请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列
//来源：力扣（LeetCode）
//链接：https ://leetcode.cn/problems/merge-sorted-array
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
//{
//	int p1 = 0;
//	int p2 = 0;
//	while (p1<nums1Size)
//	{
//		if (nums1[p1] > nums2[p2])
//		{
//			nums1Size++;
//			for (int i = nums1Size - 1; i > p1; i--)
//			{
//				nums1[i] = nums1[i - 1];
//			}
//			nums1[p1++] = nums2[p2++];
//		}
//		else
//			p1++;
//	}
//	
//	while (p1 < nums1Size + nums2Size)
//	{
//		nums1[p1++] = nums2[p2++];
//	}
//	
//}
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
//    int end1 = m - 1;
//    int end2 = n - 1;
//    int end3 = m + n - 1;
//    while (end1 >= 0 && end2 >= 0)
//    {
//        if (nums1[end1] > nums2[end2])
//        {
//            nums1[end3--] = nums1[end1--];
//        }
//        else
//            nums1[end3--] = nums2[end2--];
//    }
//    while (end2 >= 0)
//    {
//        nums1[end3--] = nums2[end2--];
//    }
//
//}
//int main()
//{
//	int nums1[6] = { 1,2,3,0,0,0 };
//	int nums2[3] = { 2,5,6 };
//	merge(nums1, 3, 3, nums2, 3, 3);
//	for (int i = 0; i < 6; i++)
//	{
//		printf("%d ", nums1[i]);
//	}
//	return 0;
//}